Node.js clusterのmasterプロセスにも--max-old-space-sizeを指定する
heroku app全体には付けない
経緯
masterのnodeコマンドに対して付けなければならない
どこで付ける?
Herokuの環境変数
これはダメ。batch処理などにも影響してしまう
Procfileにweb: NODE_OPTIONS=--max-old-space-size=150 npm startと書く npm run start:herokuを作り、そっちを使うようProcfileで指定する
npm startする
npm startはnode run-server.jsを呼び出す。これでwebプロセスだけにNODE_OPTIONSが付いてサーバー起動
逆に、Procfileはweb: npm startのままで
npm startからnode run-server.jsではなく、bash prepare-server.shを起動
prepare-server.shは
NODE_ENVを判別して、node run-server.jsとtsx watch run-server.jsを使い分けてサーバー起動 全ての環境でnpm startという共通コマンドでサーバー起動できる
オンプレ版のDockerfile
こっちを採用したshokai.icon
cluster masterとworkerそれぞれにNODE_OPTIONSを設定した様子
https://scrapbox.io/files/692577414b2f8802dfbfd656.png
code:.env
WEB_CONCURRENCY=2
SERVER_NODE_OPTIONS=--max-old-space-size=200
CLUSTER_WORKER_NODE_OPTIONS=--max-old-space-size=400
single master modeの場合
https://scrapbox.io/files/69257744bb35d7263448807d.png
空文字列での上書きもできる
https://gyazo.com/6d01d6d8fd7847eb3bdb65657cb8babc
環境変数はサーバー全体→ユーザー→コマンド実行時と設定できるタイミングが複数あり、後出しで上書きでき、空文字列での上書きも可能
そのルールに従う
リリース後の観察
NODE_OPTIONS_FOR_SERVERとNODE_OPTIONS_FOR_CLUSTER_WORKERにリネームした方がいいかもしれないshokai.icon
SERVER_NODE_OPTIONSとCLUSTER_WORKER_NODE_OPTIONSだと、アルファベット順でソートした時に遠すぎる
同じカテゴリの環境変数である事は、前方一致で示した方がいい
まあいいかshokai.icon
それ言い出すとSAML_IDP_ENTRY_POINTとENABLE_PROJECT_SAML_AUTHとか、いくらでも反例が出てくる